(一) js里的输出语句

<script>
    // 输出到控制台
    console.log('我爱web前端');
    // 弹窗
    alert('哈哈哈哈哈');
</script>

(二) 变量

js变量就是个容器, 是用来存放数据的

例1. 五种简单数据类型

<script>
    // 1.存放数字类型
   var money = 100; 
   // 2.存字符串类型
   var username = '老胡';
   var username2 = "老胡"; 
   var username3 = `老胡`;
   // 3.存布尔类型的数据
   var isOpen = true;
   var isOpen2 = false;
   // 4.存空
   var obj = null;
   // 5.声明变量时, 不赋值, 则它的值为undefined
   var age;

   console.log('money的类型:',typeof money);
   console.log('username的类型:',typeof username);
   console.log('isOpen的类型:',typeof isOpen);
   console.log('obj的类型:',typeof obj);  // object
   console.log('age的类型:',typeof age); 
</script>

例2. 变量的赋值

<script>
    // 变量的声明
    var money;
    console.log(1, money);  // undefined
    // 变量的赋值, =叫做赋值符号
    money = 10000;
    console.log(2,money);
    money = 110;
    console.log(3,money); 
</script>

例3. 常量

<script> 
    // 常量的声明和赋值
    const PI = 3.1415926535;
    PI = 6666;
    console.log(PI);
</script>

例4. 变量的命名规则

  1. 使用英文命名, 名称可以体现变量的用途
  2. 当时变量名称由两个单词组成的时候, 使用小驼峰写法
  3. 变量首字符必须是$, _, 字母开始, 其它字符可以是$, _, 字母, 数字
  4. 有些系统的关键字和保留字不能用来做变量名称
// 存放年龄
var age = 100;
var hobby = '篮球';
// 双单词变量
var goodsList;
// 关键字和保留字不能做变量名称
var break = 222;

例5. 复杂类型1-对象

<script>
    // 声明一个对象变量, 用来存放一个人的信息
    var person = { 
        // 键值对: 左边是键(属性,也是对象), 右边叫值
        username: '张三',
        age: 100,
        hobby: '犯罪',
        address: '外国'
    };

    // 读取对象的信息
    console.log('用户名:',person.username);
    console.log('用户的爱好:',person['hobby']); 

    // 修改对象的信息
    person.username = '李四';
    person.age = 80;
    console.log('person:', person); 
</script>

例6. 复杂数据类型2-数组

<script>
    // 数组(列表), a,b,c,d...叫做数组的成员
    var list = ['a', 'b', 'c', 'd', 'e','f'];
    // 读取数组的值
    console.log('第一个成员:',list[0]); // 第一个成员的值,0叫做数组的下标
    console.log('第二个成员',list[1]); // 第二个成员的值 
    // 数组的长度
    console.log('数组的长度:', list.length);
    // 最后一个成员
    console.log('最后一个成员:',list[list.length-1]);

    // 修改数组成员的值
    list[3] = 'xx';
    console.log('list',list); 
</script>

练习:

  1. 声明数组
    • 声明一个数组, 存放本组同学的名单
    • 打印数组的第一个成员和最后一个成员
  2. 打开网站: http://fresh.huruqing.cn/
    • 声明一个对象, 存放首页商品列表的其中一个商品信息
    • 声明一个对象, 存放购物车列表的其中一个商品信息
    • 声明一个数组, 存放订单列表

(三) 运算符

(1) 常见运算符

  • + - * / 特别注意: 字符+其它 = 字符串
  • % 取余数
  • = 赋值
  • ==和=== 判断两个两个变量是否相等=
<script>
    var a = 20;
    var b = 30;
    var c = '20';

    // +-*/
    console.log('a+b=',a+b);
    console.log('a-b=',a-b);
    console.log('a*b=',a*b);
    console.log('a/b=',a/b);

    // 取余
    console.log('a%b=',a%b);

    // 计算的结果可以声明一个变量来存储
    var result = a+b*c/a;
    console.log('result=',result);

    // 判断是否相等
    console.log('a==c',a==c); // true 等于
    console.log('a===c',a===c); // true 恒等于/全等于

    // 注意:等有一个加数是字符串的时候,就是字符串拼接, 而不是相加
    console.log('a+c=',a+c);
    console.log('张三'+'李四');
</script>

(2) 逻辑运算

  • 逻辑与 && 表示并且的意思
  • 逻辑或 || 表示或者的意思
  • 取反运算!
var a = true;
var b = true;
var c = false;

var m = a&&b; 
var n = a&&c;

var x = a||b;
var y = a||c;

var z = !a;

(3) 数据类型转换

  1. 转数字
  2. 转字符串
  3. 转布尔

(四) 流程控制语句

三种语句

  • 顺序, js代码默认是从上往下去执行的
  • 分支结构
  • 循环结构

例1. 顺序结构

<script>
console.log(1);
console.log(2);    
console.log(3);    
</script>

例2. 分支结构

例2.1 if else举例

<script>
    // isRain是否下雨
    var isRain = false;

    // 如果isRain为true,则执行它后面{}的代码, 否则执行else后面的代码
    if(isRain) {
        console.log('我就带伞出门');
    } else {
        console.log('我就带帽出门');
    } 
</script>

例2.2 自动转换规则

  • if后面括号里的变量会自动转换类型, 转换成布尔类型
  • undefined, null, 0, 200, 一般情况下, 变量的意思包含"空,没有"的时候, 会转换成false, 否则转成true
<script>
    var a = 0;
    // a会自动转换为false, 所以打印2222
    if (a) {
        console.log(11111);
    } else {
        console.log(22222);
    } 
</script>

例2.3 多重判断

// 多重判断
if (sex === '男') {
    alert('先生, 请进');
} else if (sex === '女') {
    alert('女士, 请进');
} else {
    alert('性别未知');
}

例2.4 三目运算符

<script>
    var isRain = true;
  	var msg = isRain?'今天下雨了':'今天没下雨';
  	console.log(msg);
</script>

例3. 循环结构

例3.1 简单的for循环

<script>
// i=0,1,2满足条件, 执行{}里的代码
for(var i=0;i<3;i++) {
    console.log(i);
}   
</script>

例3.2 打印所有的数组成员

<script>
    var list = [
        "张三",
        "李四",
        "王五",
        "陈六",
        "林七",
    ]

    for(var i=0;i<list.length;i++) {
        console.log(list[i]);
    } 
</script>

例3.3 数字累加

<script> 
    var sum = 0;
    for (var i = 1; i <= 100; i++) { 
        sum = sum + i;
        console.log(i, sum); 
    } 
</script>

(五) 函数

1.声明和调用函数

1.1 定义一个两数相加的函数并调用


例1.2 定义一个1-100累加的函数并调用


2.函数传参

2.1定义一个两数相加的可传参的函数

例2.2定义一个数字累加可传参的函数

3.对象里的函数

(六) 数组常用方法

  1. join()
  2. push()
  3. pop()
  4. includes()
  5. filter()
  6. map()
  7. slice()
  8. splice()

1. join()

把数组变成字符串

var arr = ['张三','李四','王五']; 
// 无参数 
var str = arr.join();
console.log(str);

// 一个参数: 连接符, 默认用逗号进行连接
var str = arr.join(' ==> ');
console.log(str);

2. push()和pop()

pop() 删除数组的最后一个元素并返回删除的元素。
push() 向数组的末尾添加一个或更多元素,并返回新的长度。

3. includes()

// 检查字符串是否包含'web'
var boo = str.includes('web'); 
console.log(boo); 

4. filter()

检测数组元素,并返回符合条件所有元素的数组。

// 成员是基本数据类型
var arr = [18, 28, 13, 48, 48];
// 找出大于20的成员
var newArr = arr.filter(function(item) {
    return item > 20;
});
console.log(newArr);
 


// 数组成员是引用数据类型
var arr = [
  { name: "张三", age: 18 },
  { name: "李四", age: 28 },
  { name: "王五", age: 13 },
  { name: "李三", age: 48 },
  { name: "陈六", age: 48 },
];
// 找出年龄大于20的成员
var newArr = arr.filter(function(item) {
    return item.age > 20;
}) 
console.log(newArr);
 
// 找出名字带"三"的成员
var newArr = arr.filter(function(item) {
    return item.name.includes('三');
})
console.log(newArr);

5. map()

对原来成员进行修改, 返回一个新的数组, 新的数组跟原来数组长度一样, 但新数组成员可以与原数组成员有关系, 也可以没有关系

var arr = [
  { name: "张三", age: 18 },
  { name: "李四", age: 28 },
  { name: "王五", age: 13 },
  { name: "张三", age: 48 },
  { name: "陈六", age: 48 },
];

// 给数组每一个成员添加两个属性sex和address
  var newArr = arr.map(function(item,index) {
    item.sex = '未知';
    item.address = '未知'; 
    return item;
  });
  console.log(newArr); 

// 生成一个新的数组, 数组成员由年龄组成
 var newArr = arr.map(function(item,index) {
    return item.age;
  });
  console.log(newArr); 

// 生成一个新的数组, 数组成员全部为'aa', 此时得到的新数组跟原数组没有任何关系
 var newArr = arr.map(function(item,index) {
    return 'aa';
  });
  console.log(newArr); 

6. slice()

选取数组的一部分,并返回一个新数组。

var arr = [
    {name:'张三',age:18},
    {name:'李四',age:28},
    {name:'王五',age:13},
    {name:'张三',age:48},
    {name:'陈六',age:48},
  ];
  
  // 截取下标为1-3的数组成员
  var arr2 = arr.slice(1,3);
  console.log(arr2);

  var arr3 = arr.slice(2);
  console.log(arr3);

7. splice()

可以删除数组中任意位置的成员, 还可以替换成员, 此方法会改变原来数组

// splice可以删除任意位置的成员(会改变原数组)
var arr = ['a','b','c','d','e'];
// 1. 删除成员:从位置1开始, 删除1个
arr.splice(1,1);
console.log(arr);

// 第一个参数表示删除开始的下标, 第二个参数表示删除的个数
arr.splice(2,2);
console.log(arr);  

练习和作业

  1. 计算总价

    // 商品数组列表
    var goodsList = [
      {
        productId: "94217104",
        buyNum: 1,
        masterName: "【山西】红富士苹果 8-10枚5斤装(果径80mm/枚)",
        slaveName: "生态基地种植 饱满圆润脆甜 皮薄肉厚多汁",
        userId: "60d6f0b08f119d3e25af8cef",
        price: "3480",
        cartId: "61c285c90ab3e6758a54904f",
      },
      {
        productId: "104356809",
        buyNum: 1,
        masterName: "【云南】冰糖心丑苹果",
        slaveName: "原产基地直供 脆甜多汁爽口 自然糖心结晶",
        userId: "60d6f0b08f119d3e25af8cef",
        price: "3990",
        cartId: "61c2edee0ab3e6758a549055",
      },
      {
        productId: "31129853",
        buyNum: 3,
        masterName: "四川安岳黄柠檬 3斤装(单果90-110g)",
        slaveName: "采自“中国柠檬之都” 个头圆润均匀 地道酸爽十足",
        userId: "60d6f0b08f119d3e25af8cef",
        price: "2390",
        cartId: "61c9bfd76a92be12aba9afd1",
      },
      {
        productId: "97305541",
        buyNum: 2,
        masterName: "【四川】新鲜青柠檬 3斤(单果90-110g)",
        slaveName: "果园现摘现发 清新酸爽怡人 个头圆润饱满",
        userId: "60d6f0b08f119d3e25af8cef",
        price: "1990",
        cartId: "61c9bfde6a92be12aba9afd2",
      },
      {
        productId: "88651149",
        buyNum: 2,
        masterName: "【福建】黄金百香果 大果 (单果70-100g)",
        slaveName: "醇香自然圆润 酸甜多汁可口 富含多种维生素",
        userId: "60d6f0b08f119d3e25af8cef",
        price: "5350",
        cartId: "61c9bfe76a92be12aba9afd3",
      },
    ];
    
    // 被选中的商品id数组
    var idList = [
      "61c9bfe76a92be12aba9afd3",
      "61c9bfde6a92be12aba9afd2",
      "61c9bfd76a92be12aba9afd1",
    ];
    
    // 计算总价
    
  2. 查找用户

    var users = [
      {
        name: "张三",
        sex: 1, // 男
        age: 18,
        skill: [
          "song", // 唱歌
          "speak", // 说话
          "eat", // 吃饭
        ],
      },
      {
        name: "李四",
        sex: 0, // 女
        age: 23,
        skill: [
          "play", // 玩
          "speak",
          "eat",
        ],
      },
      {
        name: "王五",
        sex: 1,
        age: 34,
        skill: [
          "song",
          "sleep", // 睡觉
          "eat",
        ],
      },
      {
        name: "赵六",
        sex: 0,
        age: 19,
        skill: [
          "song",
          "sleep",
          "dance", // 跳舞
        ],
      },
    ];
    
    function findUser(users) {
      // 请在此处补齐代码, 筛选出同时具有"speak"和"song"技能的用户, 并将他们的名字, 性别, 年龄和技能用中文在控制台打印出来
     
    } 
    
  3. 改造数组

    将以下数组成员变成 {label:'xxx', value:'xxxx'} 的形式, 其中label对应数组成员的name属性, value对应数组成员的id属性

    var list = [{"name":"梁芳","sex":"女","id":"001"},{"name":"萧艳","sex":"男","id":"002"},{"name":"宋洋","sex":"女","id":"003"},{"name":"卢伟","sex":"男","id":"004"},{"name":"康杰","sex":"男","id":"005"}]
    
    // var newList = [{label: '梁芳', value: '001'}, ....];
    

(七) 使用JavaScript对页面增删改查

  1. 获取元素节点
  2. 修改元素样式
  3. 添加元素
  4. 删除元素